\frameforsection[t]{
  \renewcommand\currentblocktitle{\hypertarget{2-1}{只读存储器(ROM)概述}}
  \outonlyblock{
    \twocolumns{
      \begin{itemize}
	\item ROM中值是预先确定的，所有是只读的
	\item ROM的输入为一个地址，输出为该地址中所存储的值
	\item ROM在制造时采用的是硬连线，故不能修改里面的数据
	\item 字长b：一次能从ROM中并行读出的数的宽度
	\item 字数N：ROM拥有地址的个数，每个地址存储的数的位宽为b
	\item 地址位数n:满足$2^n=N,n=\log_2N$
      \end{itemize}
    }{
      \outfigure{.9}{ROM原理图符号.png}
      [\zihao{6}ROM原理图符号\\
      a的宽度为n位，用来提取地址\\
      该地址存储的数从d端读出，宽度为b位\\
      该ROM字数为$N$,字长为$b$,$n=[\log_2N]$]
    }
  }
  \renewcommand\currentblocktitle{\hypertarget{2-2}{一维译码ROM原理图}}
  \outonlyblock{
    \twocolumns[.4]{
      \outfigure{.99}{一维译码的ROM电路结构.png}
      [\zihao{6}一维译码的ROM电路结构]
    }{
      \begin{itemize}
	\item 一维译码的ROM构成
	  \begin{enumerate}
	    \item 译码器：用来选择存储阵列$[d_0,d_1,\cdots,d_{2^n-1}]^T$中的某一行$d_k=[d_{k,b-1},d_{k,b-2},\cdots,0]$
	    \item 存储阵列：ROM中存储数据的地方，存储的格式可看做矩阵，每一行代表一个字，b为字长
	    \item 三态门：每一位对应一个三态门，每b位为一组,共有$2^n$组
	  \end{enumerate}
	\item 缺点：当ROM容量较大时，实现一维译码的电路中需要的太多的与门，使电路变得笨重且效率底下
      \end{itemize}
    }
  }
  \renewcommand\currentblocktitle{\hypertarget{2-3}{采用二维结构实现的ROM}}
  \outonlyblock{
    \vspace{-2ex}
    \twocolumns[.6]{
      \begin{itemize}
	\item 当ROM容量庞大时，需要较大宽度的地址编码\\
	  比如，需要8-256译码器\\
	\item 此时将一维地址码由8位分为两部分\\
	  6位(7:2)为行地址，2位(1:0)为列地址
	\item 行地址信号输入到译码器，用来选择存储阵列的行
	\item 列地址输入到多路选择器，用来选择存储阵列的列
	\item 存储阵列为正方形阵列：64$\times$64,256字$\times$16位
      \end{itemize}
    }{
      \outfigure{.99}{2维译码ROM原理图.pdf}
    }[c]
  }
  \renewcommand\currentblocktitle{\hypertarget{2-3-1}{小容量ROM的Verilog实现}}
  \outonlyblock{
    \twocolumns{
      \begin{itemize}
	\zihao{6}
	\item 使用case语句设置数据
	  \outfigure{.5}{ROM的case实现.png}
      \end{itemize}
    }{
      \begin{itemize}
	\zihao{6}
	\item 使用\$readmemh语句从文件中读取ROM数据
	  \outfigure{.6}{从文件中加载ROM数据的Verilog实现.png}
      \end{itemize}
    }
  }
  \renewcommand\currentblocktitle{\hypertarget{2-4}{大容量ROM采用的实现方式}}
  \outonlyblock{
    \twocolumns{
      \begin{itemize}
	\item 小容量ROM的Verilog实现-适合验证
	  \begin{enumerate}
	    \item 使用case语句实现
	    \item 使用readmemh从文件中读取-模块化程度高
	  \end{enumerate}
	  这种实现方式使ROM可以模块化，但存储内容不同，综合后逻辑有不同面积、延迟和功耗，不利于后期修改ROM数据
	  \item 高容量(几千字节)ROM的实现-采用定制方式，不是综合出逻辑块\\
	  \begin{enumerate}
	    \item 高度优化，体积很小、速度很快
	    \item 改变内容时，无需改变整体布局
	  \end{enumerate}
	\end{itemize}
    }{
      \begin{itemize}
	\item 高容量ROM内容的更改
	  \begin{enumerate}
	    \item 固定ROM：生产时内容就固定下来（与某个晶体管是否存在有关），无法更改
	    \item PROM:出厂时未写入内容，用户可进行一次修改
	    \item EPROM:出厂后用户可进行多次擦除和编程，进一步分为\\
	      (1)UV-EPROM：紫外线可擦除可编程ROM\\
	      (2)EEPROM:电可擦除可编程ROM
	  \end{enumerate}
      \end{itemize}
    }[c]
  }
}
